Décrivons notre envrionnement logiciel une bonne fois pour toute
Plutôt que de rentrer à la main, à chaque fois, la liste des paquets de votre environnement, nous pouvons les lister dans une fichier texte, donc versionnable dans le dépôt de votre code source.
Par convention, on nomme ce fichier manifest.scm qui contient, pour notre exemple :
Il suffit ensuite d'indiquer ce fichier à la commande guix shell:
guix shell -C -m manifest.scm
Comment être sûr de fixer la version de mes dépendances ?
En identifiant précisément l'état de mes définitions !
Les définitions sont dans des channels, i.e. des dépôts git
Il faut donc lister les dépôts git correspondant à nos dépendances et le numéro de commit de ceux-ci sur lequel on pointe : guix describe -f channels >> channels.scm
Nous avons une deuxième fichier texte, channels.scm à versionner au côté de notre code !
Récapitulons
Pour décrire avec précision notre environnement logiciel, nous avons besoin de 2 fichiers dans le dpôt Git de notre code :
manifest.scm qui liste les dépendances de notre code
channels.scmqui liste les channels utilisés et leur état
Comment fais-je pour déployer cet environnement ailleurs et/ou à un autre moment ?
On clone le dépôt du code (scripts, doc, manifest.scm, channels.scm)
Sur la machine source avec guix : guix time-machine -C channels.scm -- pack --format=squashfs -m manifest.scm
On transfère l'image ainsi créée sur la machine cible que l'one exécute (ici avec singularity)
Quelques remarques/limites
Ici, tout est simple parce que nous partons du présupposé que les dépendances dont nous avons besoin ont leur définition dans Guix. Si elles ne l'ont pas, il faut faire remonter le besoin (ou si vous vous en sentez capable, écrivez-les :))
Sauf cas particulier (fonctionnalités), ne vous attachez pas au numéro de versions de vos dépendances logicielles. Faites les tests avec les versions disponibles dans Guix et si ça marche, partez de la révision Guix testée.
Certains logiciels sont réellement difficiles à empaqueter pour Guix (e.g. softs propriétaires ou avec des dépendances de logicielles propriétaires). Dans la grande majorité des cas, ces logiciels vous éloignent de la reproductibilité par design.
Pourquoi Guix plutôt qu'autre chose ?
Parce qu'avant de garantir la reproductibilité, c'est diablement pratique et efficace !
Virtualenv mais pour tous les écosystèmes
Le voyage dans le temps et l'espace robuste et fiable...
...peu importe le système hôte
Et c'est, avec Nix, le seul gestionnaire d'env. log. permettant, simplement, de renforcer significativement la reproductibilité de nos/vos travaux numériques.
La reproductibilité logicielle ne garantit pas la reproductibilité bit-à-bit (e.g. float comp.) d'une machine à l'autre. Mais si ce n'est aps une condition suffisante, cc'est une condition nécessaire. Guix la permet, sans que ce soit compliqué.